package com.atguigu.gmall.realtime.app.func;

import com.atguigu.gmall.realtime.utils.KeywordUtil;
import org.apache.flink.table.annotation.DataTypeHint;
import org.apache.flink.table.annotation.FunctionHint;
import org.apache.flink.table.functions.TableFunction;
import org.apache.flink.types.Row;

import java.util.List;

/**
 * Created by 黄凯 on 2023/7/13 0013 11:03
 *
 * @author 黄凯
 * 永远相信美好的事情总会发生.
 * <p>
 * 自定义UDTF函数，实现分词
 * *      继承TableFunction，标记当前类是自定义函数类
 * *      在类中必须定义名字为eval的方法，注意：这个方法不是对父类方法的重写，因为在父类中明确不了自定义函数的参数
 * *      在sql中调用函数的时候，底层会调用类中的eval方法，eval可以重载，会根据sql中函数的参数决定调用哪个eval
 */

@FunctionHint(output = @DataTypeHint("ROW<word STRING>"))
public class KeywordUDTF extends TableFunction<Row> {

    public void eval(String text) {

        List<String> analyze = KeywordUtil.analyze(text);

        for (String keyword : analyze) {

            collect(Row.of(keyword));

        }

    }

}
